const commonutils = {
  /**
   * 获取指定天数后的日期
   * @param {number} day 天数（0=今天，1=明天，-1=昨天）
   * @returns {string} YYYY-MM-DD 格式的日期字符串
   */
  getFutureDate: (day = 0) => {
    // 创建日期对象副本（避免修改原始日期）
    const date = new Date();
    date.setHours(0, 0, 0, 0); // 清零时间部分，避免时间影响天数计算

    // 调整日期天数（支持正负值）
    date.setDate(date.getDate() + day);

    // 格式化为 YYYY-MM-DD
    const year = date.getFullYear();
    const month = (date.getMonth() + 1).toString().padStart(2, "0"); // 月份补零
    const dayOfMonth = date.getDate().toString().padStart(2, "0"); // 日期补零

    return `${year}-${month}-${dayOfMonth}`;
  },
  /**
   * 获取指定时间后的日期
   * @param {value} number
   * @param {baseDateStr} string 日期字符串
   * @param {unit} enum 时间单位  second minute hour day
   * @returns {number} 毫秒数
   */
  addTime: (baseDateStr, value, unit = "minute") => {
    // 将时间字符串转换为Date对象（支持ISO标准格式及常见格式）
    const parseDate = (str) => {
      const date = new Date(str);
      if (isNaN(date.getTime())) {
        throw new Error(
          'Invalid date string. Supported formats: ISO 8601, "YYYY-MM-DD HH:mm:ss", etc.'
        );
      }
      return date;
    };
    const baseDate = parseDate(baseDateStr);
    const originalTime = baseDate.getTime();
    const newDate = new Date(originalTime);

    switch (unit.toLowerCase()) {
      case "second":
        newDate.setSeconds(newDate.getSeconds() + value);
        break;
      case "minute":
        newDate.setMinutes(newDate.getMinutes() + value);
        break;
      case "hour":
        newDate.setHours(newDate.getHours() + value);
        break;
      case "day":
        newDate.setDate(newDate.getDate() + value);
        break;
      default:
        throw new Error(
          "Invalid unit. Supported values: second, minute, hour, day."
        );
    }

    return newDate.getTime();
  },
  /**
   * 指定日期和现在的相差毫秒数
   * @param {targetDate} number 指定日期毫秒数
   * @returns {number} 毫秒数
   */
  subtractTime: (targetDate) => {
    const diff = targetDate - Date.now();
    return Math.max(diff, 0); // 负数时返回0[1,8](@ref)
  },
};

export default commonutils;
